package com.yxq.sso.Service;

import com.yxq.sso.entity.Menu;
import com.yxq.sso.entity.MenuVo;
import com.yxq.sso.entity.Role;
import com.yxq.sso.entity.User;
import com.yxq.sso.exception.BusinessException;

import java.util.List;
import java.util.Map;

/**
 * 用户业务接口：主要是关于用户登录的
 *
 * @author YXQ
 * @date 2021/11/30 9:25
 */
public interface UserService {


    /**
     * 执行用户一键注册或登录的方法
     *
     * @param phone 手机号
     * @param code 短信验证码
     * @param loginType 登录类型1.pc 2.小程序
     * @return 包含多组信息的键值对
     * @throws BusinessException 自定义异常
     */
    Map<String,Object> login(String phone, String code,Integer loginType) throws BusinessException;

    /**
     * 执行用户账号登录的方法
     *
     * @param phone 手机号
     * @param password 密码
     * @param loginType 登录类型
     * @return 包含多组信息的键值对
     * @throws BusinessException 自定义异常
     */
    Map<String,Object> loginByPassword(String phone, String password,Integer loginType) throws BusinessException;

    /**
     * 通过token获取用户信息的方法
     *
     * @param token 用户的令牌
     * @return 用户的信息
     * @throws BusinessException 自定义异常
     */
    User queryUserByToken(String token) throws BusinessException;

    /**
     * 获取当前用户的权限菜单树
     *
     * @param user 待查找的用户
     * @return 菜单数组
     * @throws BusinessException 自定义异常
     */
    List<Menu> getUserMenuTree(User user) throws BusinessException;

    /**
     * 获取当前用户的权限菜单树
     *
     * @param user 待查找的用户
     * @return 菜单数组
     * @throws BusinessException 自定义异常
     */
    List<MenuVo> getUserMenuVoTree(User user) throws BusinessException;

    /**
     * 查找用户当前担任的角色
     *
     * @param id 用户的id
     * @return 角色的集合
     */
    List<Role> findUserRole(Long id);

    /**
     * 给用户分配权限
     *
     * @param userId 用户的id
     * @param roleId 角色的id
     * @return 成功true失败false
     */
    Boolean setUserRole(Long userId,Long roleId);
}
